/**
 * 自定义实现数组的 join 方法，将数组元素连接成一个字符串
 *
 * 该函数使用 `join()` 方法将一个数组（或一个类数组对象）的所有元素连接成一个字符串并返回这个字符串，用逗号或指定的分隔符字符串分隔。如果数组只有一个元素，那么将返回该元素而不使用分隔符。
 *
 * 参考文档: [MDN Web Docs: join](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/join)
 *
 * @param array - 要连接的数组
 * @param separator - 分隔符，可选，默认为逗号 ","
 * @param key - 键名，可选，默认为 undefined
 * @returns 连接后的字符串
 */
export function joinArray<T>(array: unknown | Array<T | undefined | null>, separator: string = ",", key?: string): string {
  // 检查 array 是否为 null 或 undefined
  if (array === null || array === undefined) {
    return '';
  }
  // 检查 array 是否是字符串
  if (typeof array === "string") {
    return array;
  }
  // 检查 array 是否是数组
  if (!Array.isArray(array)) {
    return String(array) || '';
  }
  // 转换数组元素为字符串并连接
  return array.map((item) => {
    if (item === null || item === undefined) return "";

    if (key && typeof item === 'object' && key in item) {
      const value = (item as Record<string, unknown>)[key];
      return String(value);
    }

    return String(item);
  }).join(separator);
}

export default joinArray;
